package com.soft.javase.ch07;

/**
 * @author wangzhisen
 * @Desc TODO
 * @date 2025/4/28
 *
 * 处理异常的方式
 * 方式一：throw、throws
 * 1.消极的处理方式
 * 2.向上抛出，抛给调用者处理
 * 3.除了main()以外，都会优先选择抛出方式解决，希望调用者可以预见到此问题
 * 4.使用场景：自定义异常
 *
 * 方式二：try...catch...finally
 * 1.积极的处理方式，就地处理
 * 2.在抛无可抛的地方，例如：main()、JFrame窗体等
 * 3.使用场景：编译期异常
 * 4.语法
 * try{
 *    //可能会发生异常的代码，一旦到异常，后续不会再执行
 * }catch(异常类1 对象名){
 *   //处理异常
 * }catch(异常类2 对象名){
 *   //处理异常
 * }catch (Exception e){
 *   e.printStackTrace();
 * }finally{
 *   //一定会执行到，日志处理、关闭操作等
 * }
 * 注意：catch中的异常类，建议由小到大，最后Exception结尾
 *
 * JDK1.7 语法
 * try{
 *    //可能会发生异常的代码，一旦到异常，后续不会再执行
 * }catch(异常类1 | 异常类2 对象名){
 *   //处理异常
 * }finally{
 *   //一定会执行到，日志处理、关闭操作等
 * }
 * 注意：
 * 1）、一旦 catch (ArithmeticException | NullPointerException | Exception e)
 * Exception最大的，会不让前面出现子类异常信息，强制让你删除  catch (Exception e)
 * 2）、精准匹配，往往自定义异常处理方式不一样的
 * 3）、比较适用于编译期异常
 *
 *
 * 5.特殊情况
 * 1）、允许 try..catch  try..finally
 * 2）、即使上方出现return，但是finally必执行
 */
public class TryDemo1 {

    public static void main(String[] args) {
        String str = null;
        try{
            //可能会出现异常的代码
            System.out.println(str.length());
            System.out.println("try");
        }catch(ArithmeticException e) {
            System.out.println("catch ArithmeticException");
            e.printStackTrace();
        }catch(NullPointerException e) {
            System.out.println("catch NullPointerException");
            e.printStackTrace();
        }finally {
            System.out.println("finally");

        }
    }
}
